import { getToken, setToken, removeToken, setTimeStamp } from "@/utils/auth"
import { login, getUserInfo, getUserDetailById } from '@/api/user'
import { resetRouter } from '@/router/index'
// 状态
const state = {
  token: getToken(),
  userInfo: {}
}

// 修改状态
const mutations = {
  setToken(state, payload) {
    state.token = payload // 将数据设置给vuex
    // 同步给缓存
    setToken(payload)
  },
  removeToken (state) {
    // 删除vuex的token
    state.token = null
    // 先清除 vuex 再清除缓存vuex和缓存数据的同步
    removeToken()
  },
  setUserInfo (state, payload) {
    state.userInfo = payload
  },
  delUserInfo(state) {
    state.userInfo = {}
  }
}

// 执行异步
const  actions = {
 async login (context, data) {
  // 拿到token
  const res = await login(data)
  // 设置token
  context.commit('setToken',res)
  // 写入时间戳
  setTimeStamp()
  },
  
 async getUserInfo (context) {
  const res = await getUserInfo()
  console.log(res);
  const baseInfo = await getUserDetailById(res.userId)
  const baseResult = { ...res, ...baseInfo }
  context.commit('setUserInfo', baseResult)
  console.log(baseResult);
  return baseResult // 为后期做权限准备
 },
 // 退出登录
 logout (context) {
  // 删除vuex的token
  context.commit('removeToken')
  // 删除用户资料
  context.commit('delUserInfo')
  // 重置路由
  resetRouter()
  // vuex中的数据是不是还在
  // 要清空permission模块下的state数据
  context.commit('permission/setRoutes', [], { root: true })
  // 子模块调用子模块的action可以将commit的第三个参数设置成{ root: true } 就表示当前的context不是子模块了而是父模块
 } 
}


export default {
  namespaced: true,
  state,
  mutations,
  actions
}